package com.atguigu.jxc.service.impl;

import com.atguigu.jxc.dao.GoodsDao;
import com.atguigu.jxc.dao.GoodsTypeDao;
import com.atguigu.jxc.domain.ErrorCode;
import com.atguigu.jxc.domain.ServiceVO;
import com.atguigu.jxc.domain.SuccessCode;
import com.atguigu.jxc.entity.Goods;
import com.atguigu.jxc.entity.GoodsType;
import com.atguigu.jxc.service.GoodsTypeService;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class GoodsTypeServiceImpl implements GoodsTypeService {
    @Resource
    private GoodsTypeDao goodsTypeDao;
    @Resource
    private GoodsDao goodsDao;
    @Override
    public String getAllGoodsType() {

        return this.getAllGoodsType(-1).toString();
    }

    @Override
    public ServiceVO saveGoodsType(String goodsTypeName, Integer pId) {
        int state=0;
        goodsTypeDao.addType(goodsTypeName,pId,state);
        state=1;
        goodsTypeDao.updateParentState(pId,state);
        return new ServiceVO<>(SuccessCode.SUCCESS_CODE, SuccessCode.SUCCESS_MESS);
    }

    @Override
    public ServiceVO deleteGoodsType(Integer goodsTypeId) {
        GoodsType goodsType=goodsTypeDao.selectTypeById(goodsTypeId);
        List<GoodsType> goodsChildrenTypeList= goodsTypeDao.getAllGoodsTypeByParentId(goodsTypeId);
        if (goodsChildrenTypeList.size()!=0){
            return new ServiceVO<>(ErrorCode.GOODS_TYPE_ERROR_CODE, ErrorCode.GOODS_TYPE_ERROR_MESS);
        }else {
            List<GoodsType> goodsFatherList = goodsTypeDao.getAllGoodsTypeByParentId(goodsType.getPId());
            if(goodsFatherList.size() == 1){
                goodsTypeDao.updateParentState(goodsType.getPId(),0);
            }
            goodsTypeDao.deleteTypeById(goodsTypeId);
        }


        return new ServiceVO<>(SuccessCode.SUCCESS_CODE, SuccessCode.SUCCESS_MESS);

    }

    /**
     * 递归查询所有商品类别（三级分类）
     * @return
     */
    public JsonArray getAllGoodsType(Integer parentId){

        JsonArray array = this.getGoodSTypeByParentId(parentId);

        for(int i = 0;i < array.size();i++){

            JsonObject obj = (JsonObject) array.get(i);

            if(obj.get("state").getAsString().equals("open")){// 如果是叶子节点，不再递归

                continue;

            }else{// 如果是根节点，继续递归查询

                obj.add("children", this.getAllGoodsType(obj.get("id").getAsInt()));

            }

        }

        return array;
    }


    /**
     * 根据父ID获取所有子商品类别
     * @return
     */
    public JsonArray getGoodSTypeByParentId(Integer parentId){

        JsonArray array = new JsonArray();

        List<GoodsType> goodsTypeList = goodsTypeDao.getAllGoodsTypeByParentId(parentId);

        //遍历商品类别
        for(GoodsType goodsType : goodsTypeList){

            JsonObject obj = new JsonObject();

            obj.addProperty("id", goodsType.getGoodsTypeId());//ID

            obj.addProperty("text", goodsType.getGoodsTypeName());//类别名称

            if(goodsType.getGoodsTypeState() == 1){

                obj.addProperty("state", "closed"); //根节点

            }else{

                obj.addProperty("state", "open");//叶子节点

            }

            obj.addProperty("iconCls", "goods-type");//图标默认为自定义的商品类别图标

            JsonObject attributes = new JsonObject(); //扩展属性

            attributes.addProperty("state", goodsType.getGoodsTypeState());//就加入当前节点的类型

            obj.add("attributes", attributes);

            array.add(obj);

        }

        return array;
    }
}
